package com.szh.zx.gaoDingJavaBook.chapter4.one;

import java.lang.ref.SoftReference;

/**
 * 软引用，在内存充足的时候和强引用没什么不一样的，当内存不足的时候，会被释放
 * 需求： 需要某个类1000个对象，并且有可能在未来的时间访问这些对象
 * 方式一：直接new 一千个对象（第一种方式做不到未来时间从新访问这些对象）
 * 方式二：用数组存储这些对象的引用，以达到未来可以继续访问这些对象（都是强引用，会导致占用大量内存）
*
* */
class Person {
	String name;
	int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person{" +
				"name='" + name + '\'' +
				", age=" + age +
				'}';
	}
}
public class SoftReferenceTest {
	public static void main(String[] args) {
		SoftReference<Person>[] people = new SoftReference[100];
		for (int i = 0; i < people.length; i++) {
			people[i] = new SoftReference<Person>(new Person("名字"+i,(i+1)*4));
		}
		System.out.println(people[2].get());
		System.out.println(people[4].get());
		// 通知系统进行垃圾回收
		System.gc();
		System.runFinalization();
//		 垃圾回收运行之后，softreference数组里的元素保持不变
		System.out.println(people[2].get());
		System.out.println(people[4].get());
	}
}
